Purpose

Final heatmaps for the K562 6 Day data.

Initialization

Libraries

library(magrittr)
library(tidyverse)
library(pheatmap)
library(bluster)
library(Matrix)

Parameters

set.seed(20210818)

CLUSTERS_GENE_UNREG=c(9,12,13)

## input files
FILE_CLUSTERS_TARGETS="tbl/df_target_nnclusters_kd6_essential_ui10.csv"
FILE_CLUSTERS_GENES="tbl/df_gene_nnclusters_kd6_essential_ui10.csv"
FILE_REORDER="metadata/kd6-cluster-info-sm.csv"
RDS_DWUI="data/dwui/20221107-dwui-target-gene-kd6-essential.Rds"
RDS_ZDWUI="data/dwui/20221107-zdwui-target-gene-kd6-essential.Rds"

## output files
FILE_OUT_AVG_TARGET="img/heatmap-kd6-essential-avg-target-clusters-final.pdf"
FILE_OUT_AVG_GENE="img/heatmap-kd6-essential-avg-gene-clusters-final.pdf"
FILE_OUT_AVG_BOTH="img/heatmap-kd6-essential-avg-both-clusters-final.pdf"
FILE_OUT_FINAL="img/heatmap-kd6-essential-nnclusters-final.pdf"

## aesthetics
NCOLORS=100
COLORS_BWR <- colorRampPalette(c("blue", "white", "red"))(NCOLORS)
COLORS_MKY <- colorRampPalette(c("magenta", "black", "yellow"))(NCOLORS)
COLORS_YKM <- colorRampPalette(c("yellow", "black", "magenta"))(NCOLORS)
COLORS_RKG <- colorRampPalette(c("red", "black", "green"))(NCOLORS)
breaks_dwui <- seq(-0.5, 0.5, length.out=NCOLORS + 1)
breaks_zdwui <- seq(-4, 4, length.out=NCOLORS + 1)
breaks_zdwui_broad <- seq(-6, 6, length.out=NCOLORS + 1)
breaks_pca <- seq(-20, 20, length.out=NCOLORS + 1)

Data

Loading

dwui_target_gene <- readRDS("data/dwui/20221107-dwui-target-gene-kd6-essential.Rds")
dwui_target_gene[is.na(dwui_target_gene)] <- 0
zdwui_target_gene <- readRDS("data/dwui/20221107-zdwui-target-gene-kd6-essential.Rds")
zdwui_target_gene[is.na(zdwui_target_gene)] <- 0

map_cluster_order <- read_csv(FILE_REORDER, col_select=c("cluster_id_target","order_heatm_new")) %>% deframe()
df_cluster_target <- read_csv(FILE_CLUSTERS_TARGETS) %>% 
    ## apply renaming
    mutate(cluster_id=factor(map_cluster_order[as.character(cluster_id)], 
                             levels=sort(unique(map_cluster_order))))
df_cluster_gene <- read_csv(FILE_CLUSTERS_GENES) %>% 
    mutate(cluster_id=factor(cluster_id, levels=sort(unique(cluster_id))))

Preprocessing

sgid2gene <- df_cluster_target %>%
    dplyr::select(sgID_AB, target_gene) %>%
    distinct(sgID_AB, target_gene) %>%
    deframe()

ens2gene <- df_cluster_gene %>%
    dplyr::select(gene_id, gene_name) %>%
    distinct(gene_id, gene_name) %>%
    deframe()

convert_rownames <- function (mat, in2out) {
    mat %>% set_rownames(in2out[rownames(.)])
}

convert_colnames <- function (mat, in2out) {
    mat %>% set_colnames(in2out[colnames(.)])
}

idx_targets1 <- df_cluster_target %>%
    arrange(cluster_id, target_gene) %$%
    sgID_AB

idx_genes1 <- df_cluster_gene %>%
    arrange(cluster_id, gene_name) %$%
    gene_id

idx_genes_clean <- df_cluster_gene %>%
    filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
    arrange(cluster_id, gene_name) %$%
    gene_id

Compute Cluster Means

Target Clusters

I_cluster_target <- df_cluster_target %>%
    dplyr::select(sgID_AB, cluster_id) %>%
    deframe %>% fac2sparse

## cluster target means
M_cluster_target <- I_cluster_target %>% { . / rowSums(.) }

mzdwui_cluster_gene <- M_cluster_target[,idx_targets1] %*% zdwui_target_gene[idx_targets1,]
mzdwui_cluster_gene %<>% as.matrix

Plot Target Cluster Means

df_col_annots <- df_cluster_gene %>%
    dplyr::select(gene_id, cluster_id) %>%
    rename(gene_cluster=cluster_id) %>%
    column_to_rownames("gene_id")

pheatmap(mzdwui_cluster_gene[, idx_genes_clean], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=1, fontsize_row=10,
         annotation_col=df_col_annots,
         show_colnames=FALSE, show_rownames=TRUE, scale='none', 
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
         cutree_rows=NA, cutree_cols=NA)

Reordered Target Clusters DWUI

idx_targets2 <- df_cluster_target %>%
    arrange(cluster_id, target_gene) %$%
    sgID_AB

df_row_annots <- df_cluster_target %>%
    dplyr::select(sgID_AB, cluster_id) %>%
    rename(target_cluster=cluster_id) %>%
    column_to_rownames("sgID_AB")

pheatmap(zdwui_target_gene[idx_targets2, idx_genes_clean], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=1, fontsize_row=10,
         annotation_row=df_row_annots, 
         annotation_col=df_col_annots,
         show_colnames=FALSE, show_rownames=FALSE, scale='none',
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")

Gene Clusters

I_cluster_gene <- df_cluster_gene %>%
    filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
    dplyr::select(gene_id, cluster_id) %>%
    deframe %>% fac2sparse

## cluster target means
M_cluster_gene <- I_cluster_gene %>% { . / rowSums(.) }

mzdwui_target_cluster <- zdwui_target_gene[,idx_genes_clean] %*% t(M_cluster_gene[,idx_genes_clean])
mzdwui_target_cluster %<>% as.matrix

Plot Gene Cluster Means

pheatmap(mzdwui_target_cluster[idx_targets2,], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=10, fontsize_row=10,
         show_colnames=TRUE, show_rownames=FALSE, scale='none', 
         angle_col=0, annotation_names_row=FALSE,
         annotation_row=df_row_annots, 
         cluster_rows=FALSE, cluster_cols=TRUE, clustering_method="complete", 
         drop_levels=TRUE)

Reordered Gene Cluster Means

idx_clusters_genes <- as.character(c(20,16,7,8,1,3,18,2,5,10,15,19,14,11,4,6,17))

pheatmap(mzdwui_target_cluster[idx_targets2, idx_clusters_genes], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=10, fontsize_row=10,
         show_colnames=TRUE, show_rownames=FALSE, scale='none', 
         annotation_row=df_row_annots, 
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete", 
         drop_levels=TRUE)

Reordered All Clusters DWUI

idx_genes2 <- df_cluster_gene %>%
    filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
    mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
    arrange(cluster_id, gene_name) %$%
    gene_id

df_col_annots <- df_cluster_gene %>%
    dplyr::select(gene_id, cluster_id) %>%
    mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
    rename(gene_cluster=cluster_id) %>%
    column_to_rownames("gene_id")

gaps_col <- df_cluster_gene %>%
    filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
    mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
    arrange(cluster_id, gene_name) %$%
    table(cluster_id) %>%
    cumsum

gaps_row <- df_cluster_target %>%
    arrange(cluster_id, target_gene) %$%
    table(cluster_id) %>%
    cumsum
         
pheatmap(zdwui_target_gene[idx_targets2, idx_genes2], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=1, fontsize_row=10,
         annotation_row=df_row_annots, 
         annotation_col=df_col_annots,
         show_colnames=FALSE, show_rownames=FALSE, scale='none',
         annotation_names_row=FALSE, annotation_names_col=FALSE,
         gaps_row=gaps_row,
         gaps_col=gaps_col,
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")

Final Joint Plot

pheatmap(zdwui_target_gene[idx_targets2, idx_genes2], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=1, fontsize_row=1,
         annotation_row=df_row_annots, 
         annotation_col=df_col_annots,
         show_colnames=TRUE, show_rownames=TRUE, scale='none',
         labels_row=sgid2gene[idx_targets2],
         labels_col=ens2gene[idx_genes2],
         annotation_names_row=FALSE, annotation_names_col=FALSE,
         gaps_row=gaps_row,
         gaps_col=gaps_col,
         cluster_rows=FALSE, cluster_cols=FALSE,
         filename=FILE_OUT_FINAL, width=16, height=16)

Export Clustered Targets

pheatmap(mzdwui_cluster_gene[, idx_genes2], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=1, fontsize_row=10,
         annotation_col=df_col_annots,
         annotation_names_row=FALSE, annotation_names_col=FALSE,
         show_colnames=FALSE, show_rownames=TRUE, scale='none', 
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
         cutree_rows=NA, cutree_cols=NA, 
         filename=FILE_OUT_AVG_TARGET, width=8, height=4)

Export Clustered Genes

pheatmap(mzdwui_target_cluster[idx_targets2,], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=10, fontsize_row=10,
         show_colnames=TRUE, show_rownames=FALSE, scale='none', 
         angle_col=0,
         annotation_row=df_row_annots, 
         annotation_names_row=FALSE, annotation_names_col=FALSE,
         cluster_rows=FALSE, cluster_cols=TRUE, clustering_method="complete", 
         drop_levels=TRUE, 
         filename=FILE_OUT_AVG_GENE, width=5, height=6)

Double Average

mzdwui_cluster_cluster <- M_cluster_target[,idx_targets2] %*% mzdwui_target_cluster[idx_targets2,]

pheatmap(mzdwui_cluster_cluster[,idx_clusters_genes], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=10, fontsize_row=10,
         show_colnames=TRUE, show_rownames=TRUE, scale='none', 
         angle_col=0,
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")

Export Double Average

pheatmap(mzdwui_cluster_cluster[,idx_clusters_genes], 
         color=COLORS_BWR,
         breaks=breaks_zdwui,
         fontsize_col=10, fontsize_row=10,
         show_colnames=TRUE, show_rownames=TRUE, scale='none', 
         angle_col=0,
         cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
         filename=FILE_OUT_AVG_BOTH, width=5, height=4)

Runtime Details

Session Info

## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: macOS Big Sur 10.16
## 
## Matrix products: default
## BLAS/LAPACK: /Users/mfansler/miniconda3/envs/bioc_3_14/lib/libopenblasp-r0.3.18.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] Matrix_1.3-4    bluster_1.4.0   pheatmap_1.0.12 forcats_0.5.1  
##  [5] stringr_1.4.0   dplyr_1.0.8     purrr_0.3.4     readr_2.1.1    
##  [9] tidyr_1.1.4     tibble_3.1.7    ggplot2_3.3.5   tidyverse_1.3.1
## [13] magrittr_2.0.3 
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.4.2           sass_0.4.0           bit64_4.0.5         
##  [4] vroom_1.5.7          jsonlite_1.7.2       modelr_0.1.8        
##  [7] bslib_0.3.1          assertthat_0.2.1     highr_0.9           
## [10] stats4_4.1.1         cellranger_1.1.0     yaml_2.2.1          
## [13] pillar_1.7.0         backports_1.4.0      lattice_0.20-45     
## [16] glue_1.6.2           digest_0.6.29        RColorBrewer_1.1-2  
## [19] rvest_1.0.2          colorspace_2.0-2     htmltools_0.5.2     
## [22] pkgconfig_2.0.3      broom_0.8.0          haven_2.4.3         
## [25] scales_1.1.1         tzdb_0.2.0           BiocParallel_1.28.0 
## [28] generics_0.1.1       farver_2.1.0         ellipsis_0.3.2      
## [31] withr_2.4.3          BiocGenerics_0.40.0  cli_3.3.0           
## [34] crayon_1.4.2         readxl_1.3.1         evaluate_0.15       
## [37] fs_1.5.2             fansi_0.5.0          xml2_1.3.3          
## [40] tools_4.1.1          hms_1.1.1            lifecycle_1.0.1     
## [43] S4Vectors_0.32.0     munsell_0.5.0        reprex_2.0.1        
## [46] cluster_2.1.2        compiler_4.1.1       jquerylib_0.1.4     
## [49] rlang_1.0.2          grid_4.1.1           BiocNeighbors_1.12.0
## [52] rstudioapi_0.13      igraph_1.2.9         rmarkdown_2.11      
## [55] gtable_0.3.0         DBI_1.1.1            R6_2.5.1            
## [58] lubridate_1.8.0      knitr_1.39           fastmap_1.1.0       
## [61] bit_4.0.4            utf8_1.2.2           stringi_1.7.6       
## [64] parallel_4.1.1       Rcpp_1.0.7           vctrs_0.4.1         
## [67] dbplyr_2.1.1         tidyselect_1.1.1     xfun_0.30

Conda Environment

## Conda Environment YAML
name: base
channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - anaconda-client=1.8.0=pyhd8ed1ab_0
  - anaconda-project=0.10.2=pyhd8ed1ab_0
  - attrs=21.2.0=pyhd8ed1ab_0
  - awscli=1.27.45=py39h6e9494a_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - backports.zoneinfo=0.2.1=py39h701faf5_5
  - bagit=1.8.1=pyhd8ed1ab_0
  - bagit-profile=1.3.1=pyhd8ed1ab_0
  - bdbag=1.6.1=pyhd8ed1ab_0
  - beautifulsoup4=4.9.3=pyhb0f4dca_0
  - blinker=1.4=py_1
  - boa=0.14.0=pyhd8ed1ab_0
  - boolean.py=3.7=py_0
  - boto3=1.26.45=pyhd8ed1ab_0
  - botocore=1.29.45=pyhd8ed1ab_0
  - brotlipy=0.7.0=py39h63b48b0_1004
  - bzip2=1.0.8=h0d85af4_4
  - c-ares=1.18.1=h0d85af4_0
  - ca-certificates=2022.12.7=h033912b_0
  - cachecontrol=0.12.11=pyhd8ed1ab_0
  - cairo=1.16.0=h904041c_1014
  - cctools=973.0.1=hd9211c8_2
  - cctools_osx-64=973.0.1=h3e07e27_2
  - certifi=2022.12.7=pyhd8ed1ab_0
  - cffi=1.15.1=py39hae9ecf2_0
  - chardet=5.0.0=py39h6e9494a_0
  - charset-normalizer=2.0.0=pyhd8ed1ab_0
  - click=8.1.3=py39h6e9494a_0
  - clyent=1.2.2=py_1
  - colorama=0.4.3=py_0
  - commonmark=0.9.1=py_0
  - conda=23.1.0=py39h6e9494a_0
  - conda-build=3.21.9=py39h6e9494a_1
  - conda-forge-pinning=2021.10.10.22.03.30=hd8ed1ab_0
  - conda-libmamba-solver=23.1.0=pyhd8ed1ab_0
  - conda-pack=0.6.0=pyhd3deb0d_0
  - conda-package-handling=2.0.2=pyh38be061_0
  - conda-package-streaming=0.7.0=pyhd8ed1ab_1
  - conda-smithy=3.23.1=pyhd8ed1ab_0
  - conda-standalone=4.10.3=h694c41f_0
  - conda-suggest=0.1.1=pyh9f0ad1d_0
  - conda-suggest-conda-forge=2021.8.24=h694c41f_0
  - conda-verify=3.1.1=py39h6e9494a_1004
  - constructor=3.3.1=py39h6e9494a_0
  - coreutils=9.1=h5eb16cf_0
  - cryptography=38.0.4=py39hbeae22c_0
  - curl=7.86.0=h6df9250_2
  - cyrus-sasl=2.1.27=h1e973b7_6
  - dataclasses=0.8=pyhc8e2a94_3
  - dbus=1.13.6=ha13b53f_2
  - deprecated=1.2.12=pyh44b312d_0
  - docutils=0.16=py39h6e9494a_3
  - expat=2.5.0=hf0c8a7f_0
  - ffq=0.2.1=pyhdfd78af_0
  - filelock=3.0.12=pyh9f0ad1d_0
  - fmt=9.1.0=hb8565cd_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.14.1=h5bb23bf_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - freetype=2.12.1=h3f81eb7_1
  - fribidi=1.0.10=hbcb3906_0
  - frozendict=2.3.4=py39h701faf5_0
  - future=0.18.2=py39h6e9494a_5
  - gawk=5.1.0=h8a989fb_0
  - gdk-pixbuf=2.42.6=h2e6141f_0
  - gettext=0.21.1=h8a4c099_0
  - giflib=5.2.1=hbcb3906_2
  - git=2.39.0=pl5321h0195497_0
  - git-lfs=2.13.3=h694c41f_0
  - gitdb=4.0.7=pyhd8ed1ab_0
  - gitpython=3.1.18=pyhd8ed1ab_0
  - glib=2.74.1=hbc0c0cd_1
  - glib-tools=2.74.1=hbc0c0cd_1
  - glob2=0.7=py_0
  - globus-sdk=2.0.1=pyhd8ed1ab_0
  - gmp=6.2.1=h2e338ed_0
  - gnupg=2.3.3=hd723a69_0
  - gnutls=3.6.13=h756fd2b_1
  - graphite2=1.3.13=h2e338ed_1001
  - harfbuzz=6.0.0=h08f8713_0
  - htop=3.2.1=h398481e_0
  - htslib=1.15=hc057d7f_0
  - hub=2.14.2=hc7d050b_0
  - icu=70.1=h96cf925_0
  - idna=3.1=pyhd3deb0d_0
  - importlib-metadata=4.11.4=py39h6e9494a_0
  - importlib_metadata=4.11.4=hd8ed1ab_0
  - importlib_resources=5.4.0=pyhd8ed1ab_0
  - inotify_simple=1.3.5=pyha770c72_3
  - ipython_genutils=0.2.0=py_1
  - isodate=0.6.0=py_1
  - jbig=2.1=h0d85af4_2003
  - jinja2=3.0.1=pyhd8ed1ab_0
  - jmespath=0.10.0=pyh9f0ad1d_0
  - joblib=1.0.1=pyhd8ed1ab_0
  - jpeg=9d=hbcb3906_0
  - json5=0.9.5=pyh9f0ad1d_0
  - jsonschema=4.3.1=pyhd8ed1ab_0
  - jupyter_core=4.11.1=py39h6e9494a_0
  - krb5=1.20.1=h049b76e_0
  - ld64=609=hd2e7500_2
  - ld64_osx-64=609=h2487922_2
  - ldid=2.1.2=h6a69015_3
  - lerc=2.2.1=h046ec9c_0
  - libapr=1.7.0=h0d85af4_5
  - libaprutil=1.6.1=h664449b_5
  - libarchive=3.6.2=h6d8d9f1_0
  - libassuan=2.5.5=he49afe7_0
  - libcurl=7.86.0=h6df9250_2
  - libcxx=14.0.6=hccf4f1f_0
  - libdb=6.2.32=he49afe7_0
  - libdeflate=1.10=h0d85af4_0
  - libedit=3.1.20191231=h0678c8f_2
  - libev=4.33=haf1e3a3_1
  - libffi=3.4.2=h0d85af4_5
  - libgcrypt=1.10.1=h5eb16cf_0
  - libglib=2.74.1=h4c723e1_1
  - libgpg-error=1.45=h8d84a1d_0
  - libiconv=1.17=hac89ed1_0
  - libidn2=2.3.2=h0d85af4_0
  - libksba=1.3.5=h0a44026_1000
  - liblief=0.11.5=he49afe7_0
  - libllvm12=12.0.1=hd011deb_2
  - libmagic=5.39=haaf19a9_0
  - libmamba=1.1.0=hdec3fd3_3
  - libmambapy=1.1.0=py39he664332_3
  - libnghttp2=1.47.0=h5aae05b_1
  - libntlm=1.4=h0d85af4_1002
  - libpng=1.6.39=ha978bb4_0
  - librsvg=2.52.5=h5e5d7d9_2
  - libsolv=0.7.23=hbc0c0cd_0
  - libsqlite=3.40.0=ha978bb4_0
  - libssh2=1.10.0=h47af595_3
  - libtiff=4.3.0=h1167814_0
  - libunistring=0.9.10=h0d85af4_0
  - libutf8proc=2.8.0=hb7f2c08_0
  - libwebp-base=1.2.1=h0d85af4_0
  - libxml2=2.10.3=hb9e07b5_0
  - libxslt=1.1.37=h5d22bc9_0
  - libzlib=1.2.13=hfd90126_4
  - license-expression=1.2=py_0
  - lockfile=0.12.2=py_1
  - lxml=4.9.2=py39hfbce9ca_0
  - lz4-c=1.9.3=he49afe7_1
  - lzo=2.10=haf1e3a3_1000
  - mamba=1.1.0=py39h412838c_3
  - markupsafe=2.1.1=py39h63b48b0_1
  - msgpack-python=1.0.4=py39h92daf61_1
  - msrest=0.6.21=pyh44b312d_0
  - nbformat=5.1.3=pyhd8ed1ab_0
  - ncurses=6.3=h96cf925_1
  - nettle=3.6=hedd7734_0
  - npth=1.6=h96cf925_1001
  - ntbtls=0.1.2=hd9629dc_1000
  - oauthlib=3.1.1=pyhd8ed1ab_0
  - openssl=3.1.0=hfd90126_0
  - pango=1.50.12=hbd9bf65_1
  - patch=2.7.6=hbcf498f_1002
  - pcre=8.45=he49afe7_0
  - pcre2=10.40=h1c4e4bc_0
  - perl=5.32.1=0_h0d85af4_perl5
  - pigz=2.6=h5dbffcc_0
  - pip=21.2.4=pyhd8ed1ab_0
  - pixman=0.40.0=hbcb3906_0
  - pkginfo=1.7.1=pyhd8ed1ab_0
  - pluggy=1.0.0=pyhd8ed1ab_5
  - popt=1.16=h7b079dc_2002
  - prompt-toolkit=3.0.20=pyha770c72_0
  - prompt_toolkit=3.0.20=hd8ed1ab_0
  - psutil=5.9.2=py39ha30fb19_0
  - py-lief=0.11.5=py39h9fcab8e_0
  - pyasn1=0.4.8=py_0
  - pybind11-abi=4=hd8ed1ab_3
  - pycosat=0.6.3=py39h63b48b0_1010
  - pycparser=2.20=pyh9f0ad1d_2
  - pycrypto=2.6.1=py39h89e85a6_1006
  - pycryptodome=3.16.0=py39hf75c729_0
  - pygithub=1.53=py_0
  - pygments=2.10.0=pyhd8ed1ab_0
  - pyjwt=1.7.1=py_0
  - pyrsistent=0.18.1=py39h63b48b0_1
  - pysocks=1.7.1=pyha2e5f31_6
  - python=3.9.15=h709bd14_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-libarchive-c=4.0=py39h6e9494a_1
  - python-tzdata=2021.5=pyhd8ed1ab_0
  - python_abi=3.9=2_cp39
  - pytz=2021.1=pyhd8ed1ab_0
  - pytz-deprecation-shim=0.1.0.post0=py39h6e9494a_2
  - pyyaml=5.4.1=py39h701faf5_3
  - readline=8.1.2=h3899abd_0
  - reproc=14.2.3=h0d85af4_0
  - reproc-cpp=14.2.3=he49afe7_0
  - requests=2.28.1=pyhd8ed1ab_1
  - requests-oauthlib=1.3.0=pyh9f0ad1d_0
  - rich=10.16.1=pyhd8ed1ab_0
  - ripgrep=13.0.0=h244e342_0
  - rsa=4.7.2=pyh44b312d_0
  - rsync=3.2.7=h30d983d_0
  - ruamel.yaml=0.17.21=py39h63b48b0_1
  - ruamel.yaml.clib=0.2.6=py39h63b48b0_1
  - ruamel_yaml=0.15.80=py39h701faf5_1007
  - s3transfer=0.6.0=pyhd8ed1ab_0
  - scrypt=0.8.18=py39h05e4e13_4
  - setuptools=65.3.0=pyhd8ed1ab_1
  - six=1.16.0=pyh6c4a22f_0
  - smartmontools=7.2=h940c156_0
  - smmap=3.0.5=pyh44b312d_0
  - soupsieve=2.3.1=pyhd8ed1ab_0
  - sqlite=3.38.5=hd9f0692_0
  - subversion=1.14.2=pl5321h886d438_3
  - tapi=1100.0.11=h9ce4665_0
  - tk=8.6.12=h5dbffcc_0
  - toolz=0.11.1=py_0
  - tornado=6.2=py39h701faf5_0
  - tqdm=4.62.2=pyhd8ed1ab_0
  - traitlets=5.1.0=pyhd8ed1ab_0
  - typing_extensions=3.10.0.0=pyha770c72_0
  - tzdata=2021e=he74cb21_0
  - tzlocal=4.2=py39h6e9494a_1
  - urllib3=1.26.6=pyhd8ed1ab_0
  - vsts-python-api=0.1.22=py_0
  - watchgod=0.7=pyhd8ed1ab_0
  - wcwidth=0.2.5=pyh9f0ad1d_2
  - wget=1.20.3=hd3787cc_1
  - wheel=0.37.0=pyhd8ed1ab_1
  - wrapt=1.14.1=py39h701faf5_0
  - xxhash=0.8.0=h35c211d_3
  - xz=5.2.6=h775f41a_0
  - yaml=0.2.5=haf1e3a3_0
  - yaml-cpp=0.7.0=hb486fe8_1
  - zipp=3.5.0=pyhd8ed1ab_0
  - zlib=1.2.13=hfd90126_4
  - zstandard=0.19.0=py39h5bcbcff_1
  - zstd=1.5.2=hfa58983_4
  - pip:
      - pyopenssl==20.0.1
prefix: /Users/mfansler/miniconda3